home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / include / linux / usb / cdc.h < prev    next >
C/C++ Source or Header  |  2008-10-24  |  7KB  |  237 lines

  1. /*
  2.  * USB Communications Device Class (CDC) definitions
  3.  *
  4.  * CDC says how to talk to lots of different types of network adapters,
  5.  * notably ethernet adapters and various modems.  It's used mostly with
  6.  * firmware based USB peripherals.
  7.  */
  8.  
  9. #ifndef __LINUX_USB_CDC_H
  10. #define __LINUX_USB_CDC_H
  11.  
  12. #define USB_CDC_SUBCLASS_ACM            0x02
  13. #define USB_CDC_SUBCLASS_ETHERNET        0x06
  14. #define USB_CDC_SUBCLASS_WHCM            0x08
  15. #define USB_CDC_SUBCLASS_DMM            0x09
  16. #define USB_CDC_SUBCLASS_MDLM            0x0a
  17. #define USB_CDC_SUBCLASS_OBEX            0x0b
  18.  
  19. #define USB_CDC_PROTO_NONE            0
  20.  
  21. #define USB_CDC_ACM_PROTO_AT_V25TER        1
  22. #define USB_CDC_ACM_PROTO_AT_PCCA101        2
  23. #define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE    3
  24. #define USB_CDC_ACM_PROTO_AT_GSM        4
  25. #define USB_CDC_ACM_PROTO_AT_3G            5
  26. #define USB_CDC_ACM_PROTO_AT_CDMA        6
  27. #define USB_CDC_ACM_PROTO_VENDOR        0xff
  28.  
  29. /*-------------------------------------------------------------------------*/
  30.  
  31. /*
  32.  * Class-Specific descriptors ... there are a couple dozen of them
  33.  */
  34.  
  35. #define USB_CDC_HEADER_TYPE        0x00    /* header_desc */
  36. #define USB_CDC_CALL_MANAGEMENT_TYPE    0x01    /* call_mgmt_descriptor */
  37. #define USB_CDC_ACM_TYPE        0x02    /* acm_descriptor */
  38. #define USB_CDC_UNION_TYPE        0x06    /* union_desc */
  39. #define USB_CDC_COUNTRY_TYPE        0x07
  40. #define USB_CDC_NETWORK_TERMINAL_TYPE    0x0a    /* network_terminal_desc */
  41. #define USB_CDC_ETHERNET_TYPE        0x0f    /* ether_desc */
  42. #define USB_CDC_WHCM_TYPE        0x11
  43. #define USB_CDC_MDLM_TYPE        0x12    /* mdlm_desc */
  44. #define USB_CDC_MDLM_DETAIL_TYPE    0x13    /* mdlm_detail_desc */
  45. #define USB_CDC_DMM_TYPE        0x14
  46. #define USB_CDC_OBEX_TYPE        0x15
  47.  
  48. /* "Header Functional Descriptor" from CDC spec  5.2.3.1 */
  49. struct usb_cdc_header_desc {
  50.     __u8    bLength;
  51.     __u8    bDescriptorType;
  52.     __u8    bDescriptorSubType;
  53.  
  54.     __le16    bcdCDC;
  55. } __attribute__ ((packed));
  56.  
  57. /* "Call Management Descriptor" from CDC spec  5.2.3.2 */
  58. struct usb_cdc_call_mgmt_descriptor {
  59.     __u8    bLength;
  60.     __u8    bDescriptorType;
  61.     __u8    bDescriptorSubType;
  62.  
  63.     __u8    bmCapabilities;
  64. #define USB_CDC_CALL_MGMT_CAP_CALL_MGMT        0x01
  65. #define USB_CDC_CALL_MGMT_CAP_DATA_INTF        0x02
  66.  
  67.     __u8    bDataInterface;
  68. } __attribute__ ((packed));
  69.  
  70. /* "Abstract Control Management Descriptor" from CDC spec  5.2.3.3 */
  71. struct usb_cdc_acm_descriptor {
  72.     __u8    bLength;
  73.     __u8    bDescriptorType;
  74.     __u8    bDescriptorSubType;
  75.  
  76.     __u8    bmCapabilities;
  77. } __attribute__ ((packed));
  78.  
  79. /* capabilities from 5.2.3.3 */
  80.  
  81. #define USB_CDC_COMM_FEATURE    0x01
  82. #define USB_CDC_CAP_LINE    0x02
  83. #define USB_CDC_CAP_BRK    0x04
  84. #define USB_CDC_CAP_NOTIFY    0x08
  85.  
  86. /* "Union Functional Descriptor" from CDC spec 5.2.3.8 */
  87. struct usb_cdc_union_desc {
  88.     __u8    bLength;
  89.     __u8    bDescriptorType;
  90.     __u8    bDescriptorSubType;
  91.  
  92.     __u8    bMasterInterface0;
  93.     __u8    bSlaveInterface0;
  94.     /* ... and there could be other slave interfaces */
  95. } __attribute__ ((packed));
  96.  
  97. /* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */
  98. struct usb_cdc_country_functional_desc {
  99.     __u8    bLength;
  100.     __u8    bDescriptorType;
  101.     __u8    bDescriptorSubType;
  102.  
  103.     __u8    iCountryCodeRelDate;
  104.     __le16    wCountyCode0;
  105.     /* ... and there can be a lot of country codes */
  106. } __attribute__ ((packed));
  107.  
  108. /* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */
  109. struct usb_cdc_network_terminal_desc {
  110.     __u8    bLength;
  111.     __u8    bDescriptorType;
  112.     __u8    bDescriptorSubType;
  113.  
  114.     __u8    bEntityId;
  115.     __u8    iName;
  116.     __u8    bChannelIndex;
  117.     __u8    bPhysicalInterface;
  118. } __attribute__ ((packed));
  119.  
  120. /* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */
  121. struct usb_cdc_ether_desc {
  122.     __u8    bLength;
  123.     __u8    bDescriptorType;
  124.     __u8    bDescriptorSubType;
  125.  
  126.     __u8    iMACAddress;
  127.     __le32    bmEthernetStatistics;
  128.     __le16    wMaxSegmentSize;
  129.     __le16    wNumberMCFilters;
  130.     __u8    bNumberPowerFilters;
  131. } __attribute__ ((packed));
  132.  
  133. /* "Telephone Control Model Functional Descriptor" from CDC WMC spec 6.3..3 */
  134. struct usb_cdc_dmm_desc {
  135.     __u8    bFunctionLength;
  136.     __u8    bDescriptorType;
  137.     __u8    bDescriptorSubtype;
  138.     __u16    bcdVersion;
  139.     __le16    wMaxCommand;
  140. } __attribute__ ((packed));
  141.  
  142. /* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */
  143. struct usb_cdc_mdlm_desc {
  144.     __u8    bLength;
  145.     __u8    bDescriptorType;
  146.     __u8    bDescriptorSubType;
  147.  
  148.     __le16    bcdVersion;
  149.     __u8    bGUID[16];
  150. } __attribute__ ((packed));
  151.  
  152. /* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */
  153. struct usb_cdc_mdlm_detail_desc {
  154.     __u8    bLength;
  155.     __u8    bDescriptorType;
  156.     __u8    bDescriptorSubType;
  157.  
  158.     /* type is associated with mdlm_desc.bGUID */
  159.     __u8    bGuidDescriptorType;
  160.     __u8    bDetailData[0];
  161. } __attribute__ ((packed));
  162.  
  163. /*-------------------------------------------------------------------------*/
  164.  
  165. /*
  166.  * Class-Specific Control Requests (6.2)
  167.  *
  168.  * section 3.6.2.1 table 4 has the ACM profile, for modems.
  169.  * section 3.8.2 table 10 has the ethernet profile.
  170.  *
  171.  * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant,
  172.  * heavily dependent on the encapsulated (proprietary) command mechanism.
  173.  */
  174.  
  175. #define USB_CDC_SEND_ENCAPSULATED_COMMAND    0x00
  176. #define USB_CDC_GET_ENCAPSULATED_RESPONSE    0x01
  177. #define USB_CDC_REQ_SET_LINE_CODING        0x20
  178. #define USB_CDC_REQ_GET_LINE_CODING        0x21
  179. #define USB_CDC_REQ_SET_CONTROL_LINE_STATE    0x22
  180. #define USB_CDC_REQ_SEND_BREAK            0x23
  181. #define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS    0x40
  182. #define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER    0x41
  183. #define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER    0x42
  184. #define USB_CDC_SET_ETHERNET_PACKET_FILTER    0x43
  185. #define USB_CDC_GET_ETHERNET_STATISTIC        0x44
  186.  
  187. /* Line Coding Structure from CDC spec 6.2.13 */
  188. struct usb_cdc_line_coding {
  189.     __le32    dwDTERate;
  190.     __u8    bCharFormat;
  191. #define USB_CDC_1_STOP_BITS            0
  192. #define USB_CDC_1_5_STOP_BITS            1
  193. #define USB_CDC_2_STOP_BITS            2
  194.  
  195.     __u8    bParityType;
  196. #define USB_CDC_NO_PARITY            0
  197. #define USB_CDC_ODD_PARITY            1
  198. #define USB_CDC_EVEN_PARITY            2
  199. #define USB_CDC_MARK_PARITY            3
  200. #define USB_CDC_SPACE_PARITY            4
  201.  
  202.     __u8    bDataBits;
  203. } __attribute__ ((packed));
  204.  
  205. /* table 62; bits in multicast filter */
  206. #define    USB_CDC_PACKET_TYPE_PROMISCUOUS        (1 << 0)
  207. #define    USB_CDC_PACKET_TYPE_ALL_MULTICAST    (1 << 1) /* no filter */
  208. #define    USB_CDC_PACKET_TYPE_DIRECTED        (1 << 2)
  209. #define    USB_CDC_PACKET_TYPE_BROADCAST        (1 << 3)
  210. #define    USB_CDC_PACKET_TYPE_MULTICAST        (1 << 4) /* filtered */
  211.  
  212.  
  213. /*-------------------------------------------------------------------------*/
  214.  
  215. /*
  216.  * Class-Specific Notifications (6.3) sent by interrupt transfers
  217.  *
  218.  * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications
  219.  * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS
  220.  * RNDIS also defines its own bit-incompatible notifications
  221.  */
  222.  
  223. #define USB_CDC_NOTIFY_NETWORK_CONNECTION    0x00
  224. #define USB_CDC_NOTIFY_RESPONSE_AVAILABLE    0x01
  225. #define USB_CDC_NOTIFY_SERIAL_STATE        0x20
  226. #define USB_CDC_NOTIFY_SPEED_CHANGE        0x2a
  227.  
  228. struct usb_cdc_notification {
  229.     __u8    bmRequestType;
  230.     __u8    bNotificationType;
  231.     __le16    wValue;
  232.     __le16    wIndex;
  233.     __le16    wLength;
  234. } __attribute__ ((packed));
  235.  
  236. #endif /* __LINUX_USB_CDC_H */
  237.